java 是一種純粹的物件導向的程式語言,必須以類別(Class)的形式存在,因此類別是Java的最小程式單位,不允許可執行的語句、方法獨立存在
昨天提到的HelloWorld.java城市是一個簡單的程式,但還不是最簡單的
最簡單的是像這樣只包含一個空類別定義的程式
public class Simplest {
}
如果使用javac來編譯這個程式,可以順利編譯沒有問題
但如果用java 來命令來執行Simplest會得到以下錯誤
因為Java直譯器規定 : 如果某個類別能被直譯器直接解譯執行,則這個類別必須包含main方法,而且必須用public static void 來修飾,且main 方法的形式參數必須是字串陣列類型的(String[] args)
所以main方法的寫法幾乎是固定的!除public static 可以互換位置之外,其他部分是固定的
public static void main(String[] args) {
}
對於那些不包含main 方法的類別,也是有用的,在一個大型的Java程式,往往只需要一個類別包含main方法,其他類別都是用於被main 方法直接或間接呼叫的
通常情況,Java原始檔主檔名可以是任意的,但如果原始碼裡定義了一個public 的類別,該原始檔必須與該public 類別的類別名稱相同
(一個原始檔可以含有多個類別,但只能包含一個public 類別)
小提醒:雖然Java原始檔主檔名可以是任意的,為了有更好的可讀性
我們需要知道在執行時期,記憶體區間可分為三個部份:
Global (全域)
Stack (堆疊)
Heap (堆積)
放置全域變數(global variable)、靜態變數(static variable)
作業系統會自動化管理這個區塊,而要讓系統可以清楚的管理這些資訊,代表裡面存放的東西必須事先可以被計算好它的生命週期。這個區塊主要用來存放:區域變數(local variable)、方法的參數(method parameter)與方法的回傳位址(method return address)等。
如果Stack區不夠用或是遞回涵式(recursive function)沒寫好,會產 StackOverflowError 。
很多時候程式在執行時期才會知道要使用多少記憶體,而且該區塊的記憶體不知道什麼時候會不需要使用,通常透過new關鍵字的東西會被存放在這邊
這裡的資料系統不會自動回收,沒錯,所以隨著程式執行記憶體會越來越少,所以程式設計師必須自行管理此區的記憶體,但Java還是一貫很貼心的有機制會幫你清理這個Heap區,這個機制叫做『Garbage Collection 垃圾回收機制』
這是一種動態儲存管理技術,會自動釋放不再被程式參照的物件,除了釋放沒用的物件外,也可以清除記憶體紀錄碎片!碎片是分配給物件的記憶體區塊之間的空閒記憶體區,碎片整理將所佔用的堆積記憶體一到堆積的另一端,JVM將整理出記憶體分配給新的物件。
優點:
缺點:
影響程式效能
→因為要追蹤程式有用的物件才可以確定哪些物件是無用的
垃圾回收演算法的不完備性
→不能保證100%收集到所有廢棄記憶體
特點:
那我們今天就到這邊囉!